package com.tedu.api.list;

import org.junit.jupiter.api.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *  ArrayList实现类：数组实现---查询快，增删慢---使用集合【查询效率高】
 *
 *  链表实现集合
 *  LinkedList实现类：双向链表实现--查询类，增删快--元素增删操作多
 *
 *  ArrayList实现类：双向链表实现--查询慢，增删快--元素增删操作多
 *
 *  ArrayList实现类大部分方法完全一致
 *  添加add()  删除remove() 获取get()
 *  获取集合长度size()  清空集合clear()
 *  --------------------------------
 *  ArrayList实现类与LinkedList实现类大部分方法不一致
 *  addFirst(E e)
 *  方法补充：indexOf()   lastIndexOf()
 *  addFast(E e)
 *  removeFirst()
 *  removeFast()
 */
public class LinkedListAPI {
    /**         ArrayList     LinkedList
     * 方法补充：IndexOf()     lastIndexOf()
     */
    @Test
    public void testIndexOf(){
        //创建Linkedlinked双向链接集合对象
        List<String> listlinked=new LinkedList<>();
        listlinked.add("庵堂");
        listlinked.add("龙虎斗");
        listlinked.add("螺狮粉");
        /**
         * indexOf(E e)   返回值：int
         * 作用：返回值元素指定下标为，如果找不到，返回-1
         *
         */
        int threeIndex=listlinked.indexOf("庵汤");
        //调用父级List的indexOf方法  多态
        System.out.println("通过指定元素获取下表位："+threeIndex);
        /**LinkedList都有方法
         * LastIndexOf(E e)   返回值：int
         * 作用：找到最后一个元素的位置，如果元素不存在，返回-1
         *
         */
        int lastIndex=listlinked.lastIndexOf("螺狮粉");
        //调用子类实现类lastIndexOf方法
        System.out.println("Linkedlist的查找最后一个元素下标位"+lastIndex);
    }
    /**
     * addFirst（E e）  返回值：void
     * 作用：将指定元素添加链表头部
     * addFast（E e）  返回值：void
     * 作用：将指定元素添加至链接尾部
     * removeFirst()    返回值：void
     * 作用：移除并返回链接的第一个元素，如果链表为空，抛出异常
     * NoSuchElementException没有这个元素异常
     * removeFast()    返回值：void
     * 作用：移除并返回链接的最后一个元素，若链表为空抛出异常
     * NoSuchElementException没有这个元素异常
     *
     */
    @Test
    public void testLinkedList(){
        //创建集合对象：使用多态调用父类/子类的方法
        List<String> list=new LinkedList<>();
        list.add("111");list.add("1112");list.add("1113");
        //子类-LinkedList没有重写父类-List的方法
        //多态---向下造型
        ((LinkedList)list).addFirst("抓娃娃");
        ((LinkedList)list).addLast("抓娃娃");
        System.out.println("LinkedList集合打印"+list);
        //需求：遍历LinkedList集合---Iterator迭代器
        //以来Collection集合--list子集合接口---iterator（）
        Iterator<String> it=list.iterator();
        //2.循环遍历，Iterator迭代器：问去删
        while(it.hasNext()){
            String str=it.next();//取：获取集合元素
            System.out.println("迭代器支持Collection接口下所有类"+str);
        }
//      需求：删除LinkedList集合元素中：抓娃娃的元素
        //NoSuchElementException没有这个元素异常
        //产生原因：集合没有元素，删除首尾元素
        ((LinkedList)list).removeFirst();
        System.out.println("使用链表集合删除第一个元素"+list);

    }
}
